process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0

const helper = require('./helper')
const ffmpeg = require('fluent-ffmpeg')

const config = {
  debug: process.env.npm_config_debug || false,
  country: process.env.npm_config_country,
  exclude: process.env.npm_config_exclude,
  timeout: 10
}

let stats = {
  playlists: 0,
  channels: 0,
  failures: 0
}

async function test() {
  const playlist = helper.parsePlaylist('index.m3u')

  const countries = helper.filterPlaylists(playlist.items, config.country, config.exclude)

  for (let country of countries) {
    stats.playlists++

    console.log(`Processing '${country.url}'...`)

    const playlist = helper.parsePlaylist(country.url)

    for (let item of playlist.items) {
      stats.channels++

      if (config.debug) {
        console.log(`Checking '${item.url}'...`)
      }

      await new Promise(resolve => {
        const timeout = setTimeout(() => {
          resolve()
        }, config.timeout * 1000)

        ffmpeg(item.url, { timeout: 60 }).ffprobe(
          ['-user_agent', `"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"`],
          err => {
            if (err) {
              const message = helper.parseMessage(err, item.url)

              stats.failures++

              helper.writeToLog(country.url, message, item.url)

              console.log(`${message} '${item.url}'`)
            }

            clearTimeout(timeout)

            resolve()
          }
        )
      })
    }
  }

  if (stats.failures === 0) {
    console.log(`OK (${stats.playlists} playlists, ${stats.channels} channels)`)
  } else {
    console.log(
      `FAILURES! (${stats.playlists} playlists, ${stats.channels} channels, ${stats.failures} failures)`
    )

    process.exit(1)
  }
}

console.log('Test is running...')

test()
